﻿using Dlls;
using Persistencia;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using UI.Views.Consultas;

namespace UI.Lancamentos.Produtos_Estoque
{
    /// <summary>
    /// Interaction logic for frmCompras.xaml
    /// </summary>
    public partial class frmCompras : Window
    {
        private Produto produto;
        private ProdutosDLL produtoDll;
        private Requisicoe requisicao;
        private RequisicaoDLL requisicaoDll;
        private RequisicaoItem requisicaoItem;
        private RequisicaoItemsDLL requisicaoItemDll;
        private List<RequisicaoItem> listRequisicaoItemns;
        public frmCompras()
        {
            listRequisicaoItemns = new List<RequisicaoItem>();
            produto = new Produto();
            produtoDll = new ProdutosDLL();
            requisicao = new Requisicoe();
            requisicaoDll = new RequisicaoDLL();
            requisicaoItem = new RequisicaoItem();
            requisicaoItemDll = new RequisicaoItemsDLL();
            InitializeComponent();
        }

        private void BuscarProduto(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (txtCodProduto.Text == "")
                {
                    global.ReturnProduto = null;
                    frmConsultaPadrao consulta = new frmConsultaPadrao("Produto");
                    consulta.ShowDialog();
                    if (global.ReturnProduto != null)
                    {
                        txtCodProduto.Text = global.ReturnProduto.Codigo.ToString();
                        txtNomeProduto.Text = global.ReturnProduto.Nome.ToString();
                    }
                }
                else if (txtCodProduto.Text != "")
                {
                    Produto produto = produtoDll.getProduto(int.Parse(txtCodProduto.Text));
                    if (produto != null)
                    {
                        txtCodProduto.Text = produto.Codigo.ToString();
                        txtNomeProduto.Text = produto.Nome.ToString();
                    }
                    else
                    {
                        MessageBox.Show("Produto não encontrado");
                    }
                }
            }
        }

        private void InsertOrUpdate(object sender, RoutedEventArgs e)
        {
            if (txtNumeroRequi.Text=="")
            {
                requisicao.DataCriacao = Convert.ToDateTime(txtDataRequi.Text);
                requisicao.Situacao = cbxSituacao.Text;

                requisicaoDll.Insert(requisicao);
              // Inserindo Items na Requisição
                foreach (RequisicaoItem item in listRequisicaoItemns)
                {
                    item.CodRequisicao = requisicao.Codigo;
                    requisicaoItemDll.Insert(item);
                }
                GridViewItems.ItemsSource = null;
                MessageBox.Show("Requisição criada");
                reset(0, this);
            }
        }

        private void InserirItems(object sender, RoutedEventArgs e)
        {
            RequisicaoItem itemsRequisicao = new RequisicaoItem()
            {
                CodProduto = int.Parse(txtCodProduto.Text),
                QtdNecessaria = decimal.Parse(txtQtdNecessaria.Text),
                QtdMinima = decimal.Parse(txtQtdMinima.Text)
            };
            AdicionarItemsRequisicao(itemsRequisicao);
            GridViewItems.ItemsSource = null;
            GridViewItems.ItemsSource = listRequisicaoItemns;

            txtCodProduto.Text = "";
            txtQtdMinima.Text = "";
            txtQtdNecessaria.Text = "";
            txtNomeProduto.Text = "";
        }
        private void AdicionarItemsRequisicao(RequisicaoItem item)
        {
            listRequisicaoItemns.Add(item);
        }
        private static void reset(int depth, DependencyObject obj)
        {
            // Percorre todos os filhos do objeto visual.
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                reset(depth + 1, VisualTreeHelper.GetChild(obj, i));

            // Se for um TextBox, limpa.
            if (obj is TextBox)
                ((TextBox)obj).Text = string.Empty;
            if (obj is ComboBox)
                ((ComboBox)obj).Text = string.Empty;
            if (obj is DatePicker)
                ((DatePicker)obj).Text = string.Empty;
        }

        private void EditarRequisicao(object sender, KeyEventArgs e)
        {
            if (e.Key== Key.Enter)
            {
                if (txtNumeroRequi.Text =="")
                {
                     frmConsultaPadrao consultaPadrao = new frmConsultaPadrao("Requisicao Compra");
                     consultaPadrao.Owner = this;
                     consultaPadrao.Show();
                }
                else if (txtNumeroRequi.Text!="")
                {
                    Requisicoe requi = requisicaoDll.getRequisicao(int.Parse(txtNumeroRequi.Text));
                    if (requi!=null)
                    {
                        txtNumeroRequi.Text = requi.Codigo.ToString();
                        txtDataRequi.Text = requi.DataCriacao.ToString();
                        cbxSituacao.Text = requi.Situacao;
                    }
                }
            }
        }

    }
}
